//package com.water.aop;
//
//import com.water.controller.SysLogController;
//import com.water.entity.SysLog;
//import com.water.service.SysLogService;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.After;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.bind.annotation.RequestMapping;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.ws.rs.core.SecurityContext;
//import javax.xml.registry.infomodel.User;
//import java.lang.reflect.Method;
//import java.util.Date;
//
//@Aspect
//@Component
//public class LogTe {
//
//    @Autowired
//    private HttpServletRequest request;
//
//    @Autowired
//    private SysLogService sysLogService;
//
//    private Date visitTime;//访问时间
//    private Class clazz;//访问的类
//    private Method method;//访问的方法
//    //主要获取访问的时间、访问的类、访问的方法
//
//    @Before("execution(* com.water.controller.*.*(..))")
//    public void doBefore(JoinPoint jp) throws NoSuchMethodException,SecurityException{
//        System.out.println("切前");
//
//        visitTime = new Date();//访问时间
//        clazz = jp.getTarget().getClass();//具体要访问的类
//        String methodName = jp.getSignature().getName();//获取访问的方法名称
//        Object[] args = jp.getArgs();//获取访问的方法参数
//        System.out.println(clazz+"具体访问的类");
//        //获取具体执行的方法的Method对象
//        if(args==null&&args.length==0){
//            method = clazz.getMethod(methodName);//只能获取无参数的方法
//        }else{
//            Class[] classArgs = new Class[args.length];
//            for(int i=0;i<args.length;i++){
//                classArgs[i] = args[i].getClass(); //如果传递的方法参数类型为基本数据类型，一定要用它的包装类，如int 应改为Integer
//            }
//            method = clazz.getMethod(methodName,classArgs);
//        }
//    }
//
//    //后置通知
//    @After("execution(* com.water.controller.*.*(..))")
//    public void doAfter(JoinPoint jp) throws Exception{
//        System.out.println("切后");
//
//
//        long time = System.currentTimeMillis() - visitTime.getTime();//获取访问的时长
//        System.out.println("访问时间"+time);
//        String url = "";
//
//        if (clazz!=null&&method!=null&&clazz!=LogTe.class&&clazz!= SysLogController.class) {
//            //获取url
//            //获取类上的@RequestMapping(value="/**")
//            RequestMapping classAnnotation = (RequestMapping) clazz.getAnnotation(RequestMapping.class);
//            if (classAnnotation != null) {
//                String[] classValue = classAnnotation.value();
//                //获取方法上的@RequestMapping(value="/**")
//                RequestMapping methodAnnotation = method.getAnnotation(RequestMapping.class);
//                if (methodAnnotation != null) {
//                    String[] methodValue = methodAnnotation.value();
//                    url = classValue[0] + methodValue[0];
//                }
//            }
//            //获取访问的ip地址
//            String ip = request.getRemoteAddr();
//            System.out.println("访问ip"+ip);
//        }
//
////
////            //获取当前操作的用户
//////            SecurityContext context = SecurityContextHolder.getContext();//从上下文中获取当前登录的用户
//////            User user = (User) context.getAuthentication().getPrincipal();
//////            String username = user.getUsername();
////
////            //将日志相关信息封装到SysLog对象
////            SysLog sysLog = new SysLog();
////            sysLog.setExecutiontime((int) time);//执行时长
////            sysLog.setIp(ip);
////            sysLog.setMethod("[类名]"+clazz.getName()+"[方法名]"+method.getName());
//////            sysLog.setUsername(username);
////            sysLog.setVisittime(visitTime);
////            sysLog.setUrl(url);
////
////            //调用Service完成操作
////            sysLogService.insert(sysLog);
//
////        }
//    }
//
//
//}
